package com.moli.lumpSugar.transaction.service;

import java.util.Objects;

/**
 * @program: LumpSugarChat
 * @description:
 * @author: zhangjt
 * @create: 2024-11-01 14:30
 **/
/**
 * SecureInvokeHolder类用于线程安全地处理安全调用的状态
 * 它使用ThreadLocal来存储每个线程独有的状态，避免了多线程环境下的共享变量同步问题
 */
public class SecureInvokeHolder {
    // 定义一个ThreadLocal变量来存储Boolean值，这个值是特定于每个线程的
    private static final ThreadLocal<Boolean> secureInvokeHolder = new ThreadLocal<>();

    /**
     * 获取当前线程的安全调用状态
     *
     * @return 当前线程的安全调用状态，如果未设置则返回null
     */
    public static Boolean get() {
        return Objects.nonNull(secureInvokeHolder.get());
    }
    /**
     * 设置当前线程的安全调用状态为true
     * 这个方法用于标记当前线程正在执行安全调用
     */
    public static void set() {
        secureInvokeHolder.set(Boolean.TRUE);
    }

    /**
     * 移除当前线程的安全调用状态
     * 当安全调用完成后，使用这个方法来清理线程的本地状态，避免内存泄漏
     */
    public static void remove() {
        secureInvokeHolder.remove();
    }
}
